frontend/pages/e/[uuid]/alerts.tsx (view raw)
1import {PropsWithChildren} from 'react';
2import Alerts from '../../../containers/Alerts';
3import EventLayout, {TabComponent} from '../../../layouts/Event';
4import {
5 EventByUuidDocument,
6 EventEntity,
7 TripAlertDocument,
8 TripAlertEntity,
9} from '../../../generated/graphql';
10import pageUtils from '../../../lib/pageUtils';
11
12interface Props {
13 eventUUID: string;
14 announcement?: string;
15 event: EventEntity;
16 tripAlertEntity: TripAlertEntity;
17}
18
19const Page = (props: PropsWithChildren<Props>) => {
20 return (
21 <EventLayout
22 {...props}
23 Tab={AlertsTab}
24 tabProps={{tripAlertEntity: props.tripAlertEntity}}
25 />
26 );
27};
28
29const AlertsTab: TabComponent<Props> = ({
30 event,
31 tripAlertEntity,
32}: {
33 event: EventEntity;
34 tripAlertEntity: TripAlertEntity;
35}) => {
36 return <Alerts event={event} tripAlertEntity={tripAlertEntity} />;
37};
38
39export const getServerSideProps = pageUtils.getServerSideProps(
40 async (context, apolloClient) => {
41 const {uuid} = context.query;
42 const {host = ''} = context.req.headers;
43 let event = null;
44 let tripAlertEntity = null;
45
46 try {
47 const {data} = await apolloClient.query({
48 query: EventByUuidDocument,
49 variables: {uuid},
50 });
51 event = data?.eventByUUID?.data;
52 } catch (error) {
53 return {
54 notFound: true,
55 };
56 }
57
58 const isCarosterPlus =
59 event?.attributes?.enabled_modules?.includes('caroster-plus');
60 if (!isCarosterPlus)
61 return {
62 notFound: true,
63 };
64
65 try {
66 const {data} = await apolloClient.query({
67 query: TripAlertDocument,
68 variables: {eventId: event.id},
69 });
70 tripAlertEntity = data.eventTripAlert.data;
71 } catch (error) {
72 return {
73 notFound: true,
74 };
75 }
76
77 return {
78 props: {
79 eventUUID: uuid,
80 tripAlertEntity,
81 metas: {
82 title: event?.attributes?.name || '',
83 url: `https://${host}${context.resolvedUrl}`,
84 },
85 },
86 };
87 }
88);
89
90export default Page;